package cn.jy.map.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import cn.jy.map.domain.AutoKeyVillage;
import cn.jy.map.domain.JZJSR;
import cn.jy.map.domain.PulpFrequency;
import cn.jy.map.domain.PulpInterval;
import cn.jy.map.domain.PulpWeight;
import cn.jy.map.domain.VillageColligate;

/**
 * 村落的综合信息Mapper
 * @author Administrator
 *
 */
public interface VillageColligateMapper {

	/**
	 * 根据村落名称，获取村落综合统计信息
	 * @param villageName
	 * @return
	 */
	List<VillageColligate> getVillageColligate(@Param("villageName")String villageName);
	/**
	 * 获取重点村落
	 * @param type ：重点村落类型：A,B,C，不传则获取所有，不分类型
	 * @return
	 */
	List<VillageColligate> getKeyVillage(@Param("type")String type);

	void updateVillageColligate(VillageColligate vill);
	/**
	 * 设置重点村落
	 * @param vill
	 */
	void setKeyVillage(List<VillageColligate> vill);
	/**
	 * 清除原来所有重点村
	 * @param vill
	 */
	void cleanKeyVillage();

	void saveVillageColligate(VillageColligate vill);
	
	/**
	 * 获取所有浆员的所有村落（VillageColligate 对象中只填入村落名称）
	 * @param providerList ：不在这一堆浆员范围内的村落（这里主要是除开废弃浆员）
	 * @return
	 */
	List<VillageColligate> getAllVillage(@Param("providerList")String providerList);
	
	/**
	 * 获取当期/同期 进站人数和当期/同期 献浆量
	 */
	Map<String,Integer> getcurrentTimeNum(@Param("currentYear")String currentYear,@Param("date")String date,@Param("list")List<String> list);
	/**
	 * 获取当期/同期 新增人数和当期/同期 新增浆员的献浆量
	 */
	Map<String,Integer> getcurrentTimeAddNum(@Param("currentYear")String currentYear,@Param("date")String date,@Param("list")List<String> list);
	
	
	
	/**
	 * 获取指定浆员指定日期内的献浆总量
	 */
	Integer getCollNumsByProviders(@Param("beginDate")String beginDate,@Param("endDate")String endDate,@Param("list")List<String> list);
	/**
	 * 重新写查询奖励的方法
	 */
	Integer getCollNumsByProvider(@Param("beginDate")String beginDate,@Param("endDate")String endDate,@Param("providerNo")String providerNo);
	/**
	 * 获取指定浆员内，忠诚浆员当期、同期 的献浆的总人数、献浆量
	 * @param lastYear
	 * @param currentYear
	 * @param currentDate
	 * @param list
	 * @return
	 */
	Map<String,Integer> getZCAllNums(@Param("lastYear")String lastYear,@Param("currentYear")String currentYear,@Param("currentDate")String currentDate,@Param("list")List<String> list);
	
	/**
	 * 获取指定浆员内，忠诚浆员去年全年的献浆量
	 * @param lastYear
	 * @param currentYear
	 * @param currentDate
	 * @param list
	 * @return
	 */
	Map<String,Integer> getZCLastYearCOllNums(@Param("lastYear")String lastYear,@Param("currentYear")String currentYear,@Param("currentDate")String currentDate,@Param("list")List<String> list);
	
	
	
	/**
	 * 获取指定浆员中未链接的浆员
	 * @param list
	 * @return
	 */
	List<String> getNotConnProviders(@Param("list")List<String> list);
	/**
	 * 重新获取指定浆员中未链接的浆员
	 * @param list
	 * @return
	 */
	List<String> getNotConnProvider(@Param("providerNo")String providerNo);
	/**
	 * 获取当期未进站的所有人
	 * @param currentYear
	 * @param date
	 * @param list
	 * @return
	 */
	List<String> getNotComedProviders(@Param("currentYear")String currentYear,@Param("date")String date,@Param("list")List<String> list);
	/**
	 * 重新获取当期未进站的所有人
	 * @param currentYear
	 * @param date
	 * @param list
	 * @return
	 */
	List<String> getNotComedProvider(@Param("currentYear")String currentYear,@Param("date")String date,@Param("providerNo")String providerNo);
	
	/**
	 * 获取管理护士总人数
	 * @param list
	 * @return
	 */
	int getManageNurseNum(@Param("list")List<String> list);
	/**
	 * 重新拼接查找管理护士总人数
	 */
	int getNewManageNurseNum(@Param("providerNo") String providerNo);
	/**
	 * 获取义工总人数
	 * @param list
	 * @return
	 */
	int getVolunteerNum(@Param("list")List<String> list);
	
	/**
	 * 重新获取义工总人数
	 * @param list
	 * @return
	 */
	int getNewVolunteerNum(@Param("providerNo")String providerNo);
	/**
	 * 获取已链接献浆员总人数
	 * @param list
	 * @return
	 */
	int getConnedPNum(@Param("list")List<String> list);
	/**
	 *重新 获取已链接献浆员总人数
	 * @param list
	 * @return
	 */
	int getNewConnedPNum(@Param("providerNo")String providerNo);
	/**
	 * 获取义工管理浆员总人数
	 * @param list
	 * @return
	 */
	int getVolunConnGJZNum(@Param("list")List<String> list);
	/**
	 * 重新获取获取义工管理浆员总人数
	 * @param list
	 * @return
	 */
	int getNewVolunConnGJZNum(@Param("providerNo")String providerNo);
	/**
	 * 获取所有村落的合计信息
	 * @return
	 */
	List<VillageColligate> getTotalVillageColligate();
	/**
	 * 获取所有村落信息，包含自定义的重点村
	 * @return
	 */
	List<VillageColligate> getAllKeyAutoVillage(@Param("isKey")boolean isKey);
	/**
	 * 根据不同类型的差值排序，分别获取和去年同期相比，浆量上升最多的、新人增加最多的、忠诚浆员下降最多的 差值的前面N 条记录，用于自动标注重点村落
	 * @return
	 */
	@Deprecated
	List<VillageColligate> getSortDiffByType(@Param("type")String type);
	/**
	 * 获取采浆量当期与同期比值为正或者为负的村落
	 * @return
	 */
	List<VillageColligate> getSortDiffCollNum(@Param("isAdd")boolean isAdd);
	/**
	 * 获取新增浆员当期与同期比值为正的前top个村落【新增浆员增长最厉害的top个村落】
	 * @return
	 */
	List<VillageColligate> getAddPNum(@Param("top")int top);
	/**
	 * 获取忠诚浆员当期与同期的浆量差为负的top个村落【忠诚浆员浆量下降最厉害的top个村落】
	 * @return
	 */
	List<VillageColligate> getZcDown(@Param("top")int top);
	/**
	 * 保存自动生成的某个村子的某一类重点村落 的数据
	 * @return
	 */
	void saveAutoKeyVillage(AutoKeyVillage akv);
	/**
	 * 删除所有自动生成的重点村
	 * @return
	 */
	void delAutoKeyVillage();
	
	/**
	 * 根据村落查询重点村
	 * @param vColligate
	 * @return
	 */
	public List<VillageColligate> getByimportantVill(@Param("villageName")String villageName);
	/**
	 * 根据月份查浆量
	 */
	public String getPulpWeight(@Param("startTime")String startTime,@Param("endTime")String endTime);
	/**
	 * 查询每个月献浆的浆员建档时间
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public List<PulpFrequency> getCreateDate(@Param("startTime")String startTime,@Param("endTime")String endTime);
	/**
	 * 根据月份查新增人数
	 */
	public String getNewPeople(@Param("startTime")String startTime,@Param("endTime")String endTime);
	/**
	 * 根据月份查询R类浆员
	 */
	public String getRTypePeople(@Param("startTime")String startTime,@Param("endTime")String endTime);
	/**
	 * 根据月份查询建档未献浆浆员
	 */
	public String getNotPulpPeople(@Param("startTime")String startTime,@Param("endTime")String endTime);
	/**
	 * 根据护士查询
	 */
	public Integer getByNurseProvider(@Param("CARDID")String CARDID);
	/**
	 * 根据日期统计每个月的新增浆员
	 */
	public Integer getByNewProvider(@Param("startTime")String startTime,@Param("endTime")String endTime);
	/**
	 * 根据日期统计每个月的淘汰浆员（超龄浆员）
	 */
	public Integer getByOutProvider(@Param("startTime")String startTime,@Param("endTime")String endTime);
	/**
	 * 查询在册人数
	 */
	public Integer getByAllProviderNum(@Param("birthdayDate") String birthdayDate,@Param("CreateTime")String CreateTime);
	/**
	 * 根据介绍人姓名和月份 查询介绍人本月 介绍了几个新浆员到浆站献浆
	 * 
	 */
	public List<JZJSR> getByJSRProvider(@Param("startTime")String startTime,@Param("endTime")String endTime);
	public List<JZJSR> getByJSRProviderMonth(@Param("startTime")String startTime,@Param("endTime")String endTime);
	/**
	 * 获取介绍人发展新浆员的采浆量
	 * @param name
	 * @return
	 */
	public List<JZJSR> getNewProviderPulp(@Param("name")String name,@Param("endTime")String endTime);
	/**|
	 * 获取16年献浆员献浆间隔日期
	 * 如果小于19天每次献浆要额外加30元
	 */
	public List<PulpInterval> getPulpInterval();
}
